#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=2e5+100;
typedef long long LL;
inline LL read(){LL x=0,f=1;char ch=getchar();	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
LL a[maxn];
///2 1
///1
///? 1 2
///1
///! ???
LL ask(LL x){
   cout<<"? 1"<<" "<<x<<endl;
   LL sum;cin>>sum;
   cout.flush();
   return (1+x-1-sum);
}
int main(void){
   LL n,t;cin>>n>>t;
   LL k;cin>>k;
   LL l=1;LL r=n;
   if(n==1){
      cout<<"! 1"<<"\n";
      return 0;
   }
   LL ans=-1;
   while(l<r){
      LL mid=(l+r)>>1;
      LL sum=ask(mid);
      if(sum>k){
         r=mid-1;
      }
      else if(sum<k){
          l=mid+1;
      }
      else r=mid;
   }
   cout<<"! "<<l<<endl;
   cout.flush();
   return 0;
}
